﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

// 抽象层 
// 有纯虚函数的类是抽象类，不能实例化对象 
// 子类必须实现父类所有的纯虚函数，不然子类也变为抽象类 
class rule {
public:
	// 虚函数
	/*virtual int getnum(int a, int b) {
		return 0;
	}*/
	virtual int getnum(int a, int b) = 0; // 纯虚函数 
};

// 实现层 
class calc : public rule {
public:
	int getnum(int a, int b) {
		return a + b; 
	}
};

// 业务层，业务层直接和抽象层打交道，不需要和实现层直接打交道   
int doLogin(rule *r) {
	int a = 10;
	int b = 20;
	int ret = r->getnum(a, b); 
	return ret; 
}

void test01() {
	calc *c = new calc;
	int r = doLogin(c);
	cout << r << endl;
}

int main()
{

	test01(); 

	system("pause");
	return EXIT_SUCCESS;
}